﻿//牛客：小红的双生排列
//链接：https://ac.nowcoder.com/acm/contest/99784/C


//方法：排列组合 + 数学（虽然这道题属于数学题，但我还是认为将他作为排列组合题来会更好一些）
//这道题的核心思想是基于排列组合和数学推导，主要通过分析给定数字的奇偶性来计算排列组合的结果。

//解题思路：
//
//1. 理解排列组合的含义：
//    · 题目要求我们排列一组数，符合某些条件，最终得到一个特定的排列组合结果。
//    · 假设我们有两个数列：奇数和偶数。对于给定的 n，我们需要将这些数列按照特定的顺序排列，且要考虑奇数和偶数排列时的顺序问题。
//
//2. 判断奇偶性：
//    · 如果 n 是偶数：可以有两种排列方式：
//        i. 奇数开头：先排列奇数，再排列偶数。
//        ii. 偶数开头：先排列偶数，再排列奇数。
//        iii. 由于这两种排列是对称的，所以最终结果是 2 * ret1 * ret2，其中 ret1 和 ret2 是奇数和偶数的排列组合结果。
//    · 如果 n 是奇数：只能有一种排列方式：
//        i. 奇数开头：由于奇数必须开头，剩下的数是偶数。所以，排列组合的结果为 ret1 * ret2，其中 ret1 是奇数的排列组合，ret2 是偶数的排列组合。
//
//3. 具体步骤：
//    · 计算 n / 2!和(n / 2 + 1)!，这两个值分别代表了奇数和偶数的排列组合数。
//    · 如果 n 是偶数，计算结果为 2 * ret1 * ret2 % 1000000007。
//    · 如果 n 是奇数，计算结果为 ret1 * ret2 % 1000000007。
//
//4. 考虑取模：由于数值可能非常大，需要对每次计算结果取模 1000000007，避免整数溢出。
//
//数学推导：
// · 偶数 n：可以从两种开始（奇数或偶数），因此最终结果是 2 * (n / 2)!*(n / 2)!。
// · 奇数 n：只能从奇数开始，因此最终结果是(n / 2)!*(n / 2 + 1)!。
#include <iostream>
#include <vector>
using namespace std;

int n;

int main()
{
    cin >> n;

    long long ret1 = 1, ret2 = 1, ret = 0;

    if (n % 2 == 0)                             // 如果 n 是偶数
    {
        int len = n / 2;

        // 计算奇数和偶数个数的排列组合（算阶乘）
        for (int i = 1; i <= len; i++)
        {
            ret1 *= i;
            ret1 %= 1000000007;                 // 防止溢出，取模
        }

        ret2 = ret1;                            // 偶数和奇数排列组合相同

        cout << (2 * ret1 * ret2) % 1000000007; // 结果为 2 * ret1 * ret2，因为偶数可以从奇数或偶数开始
    }
    else                                        // 如果 n 是奇数
    {
        int len1 = n / 2;

        // 计算奇数个数的排列组合（算阶乘）
        for (int i = 1; i <= len1; i++)
        {
            ret1 *= i;
            ret1 %= 1000000007;                 // 防止溢出，取模
        }

        int len2 = n / 2 + 1;

        // 计算偶数个数的排列组合（算阶乘）
        for (int i = 1; i <= len2; i++)
        {
            ret2 *= i;
            ret2 %= 1000000007;                 // 防止溢出，取模
        }

        cout << (ret1 * ret2) % 1000000007;     // 结果为 ret1 * ret2，因为奇数必须以奇数开头
    }

    return 0;
}
